/**
 * 主应用入口 - 简化版
 * 图片、视频、文字转语音、文件解析、网络搜索、语音转文字功能已移至各自组件内部
 */
const app = new Vue({
    el: '#app',
    components: {
        Sidebar,
        FeatureView
    },
    data() {
        return {
            currentFeature: 'chat', // 默认激活智能对话
            loading: false,
            result: null,
            error: null,
            messages: [], // 用于对话功能
            // 流式对话控制
            isChatPaused: false,
            chatAbortController: null,
            chatBufferedText: '',
            // 各功能的设置参数
            settings: {
                chat: {
                    model: 'glm-4.5-flash',
                    temperature: 0.7,
                    max_tokens: 65536
                },
                image: {
                    model: 'cogview-3-flash',
                    size: '1024x1024'
                },
                video: {
                    model: 'cogvideox-flash',
                    quality: 'quality',
                    with_audio: true,
                    size: '1920x1080',
                    fps: 30
                },
                speech: {
                    model: 'glm-asr',
                    temperature: 0.95,
                    stream: false
                },
                tts: {
                    model: 'cogtts',
                    voice: 'tongtong',
                    response_format: 'wav'
                }
            },
            settingsDialogVisible: false
        };
    },
    mounted() {
        // 加载历史消息
        this.loadHistory();
    },
    methods: {
        // 选择功能
        selectFeature(feature) {
            this.currentFeature = feature;
            // 重置状态
            this.loading = false;
            this.result = null;
            this.error = null;
            // 仅对话功能保留消息记录
            if (feature !== 'chat') {
                this.messages = [];
            } else {
                // 切换到对话功能时，重新加载历史消息
                this.loadHistory();
            }
        },
        // 设置更新（从设置页回传）
        async handleUpdateSettings(featureType, newSettings) {
            try {
                if (featureType === 'all') {
                    this.settings = newSettings;
                } else {
                    this.$set(this.settings, featureType, newSettings);
                }
                // 保存到数据库
                await apiClient.saveAllSettings(this.settings);
                this.$message.success('设置已保存');
            } catch (e) {
                console.error('保存设置失败:', e);
                this.$message.error('保存设置失败');
            }
        },
        
        // 加载历史消息
        async loadHistory() {
            try {
                // 获取默认会话（ID=1）的消息
                const response = await apiClient.getConversation(1);
                if (response.success) {
                    // 如果会话存在，加载消息
                    if (response.data.messages && response.data.messages.length > 0) {
                        this.messages = response.data.messages.map(msg => ({
                            role: msg.role,
                            content: msg.content
                        }));
                    } else {
                        // 会话存在但没有消息
                        this.messages = [];
                    }
                }
            } catch (error) {
                // 如果会话不存在（404），说明还没有创建会话，消息列表为空
                if (error.response && error.response.status === 404) {
                    this.messages = [];
                } else {
                    console.error('加载历史消息失败:', error);
                }
            }
        },
        
        // 清除会话（清除消息，保留会话）
        async clearConversation() {
            try {
                // 清除消息，保留会话
                const response = await apiClient.clearMessages(1);
                if (response.success) {
                    this.messages = [];
                    this.$message.success('消息已清除');
                }
            } catch (error) {
                console.error('清除消息失败:', error);
                // 即使清除失败，也清空前端消息
                this.messages = [];
                if (window.ErrorHandler) {
                    window.ErrorHandler.showError(error);
                }
            }
        },
        
        // 发送消息（智能对话，流式输出）
        async handleSendMessage(message) {
            if (!message.trim()) return;
            
            this.loading = true;
            this.error = null;
            
            try {
                // 使用默认会话ID（1），后端会自动创建如果不存在
                const conversationId = 1;
                
                // 添加用户消息
                this.messages.push({ role: 'user', content: message.trim() });
                
                // 创建临时助手消息用于流式显示（初始为空，等待第一个chunk）
                let assistantMessageIndex = this.messages.length;
                let hasReceivedContent = false;
                // 初始化控制状态
                this.isChatPaused = false;
                this.chatBufferedText = '';
                this.chatAbortController = new AbortController();
                
                // 使用流式API
                await apiClient.sendMessageStream(
                    conversationId,
                    message.trim(),
                    (chunk) => {
                        // 流式更新消息
                        if (this.isChatPaused) {
                            // 暂停时缓存内容
                            this.chatBufferedText += chunk;
                            return;
                        }
                        if (!hasReceivedContent) {
                            // 第一次收到内容时，创建助手消息
                            hasReceivedContent = true;
                            this.messages.push({ role: 'assistant', content: chunk });
                            assistantMessageIndex = this.messages.length - 1;
                        } else {
                            // 后续内容追加
                            this.$set(this.messages[assistantMessageIndex], 'content', 
                                this.messages[assistantMessageIndex].content + chunk);
                        }
                    },
                    (fullContent) => {
                        // 完成时更新完整内容
                        if (hasReceivedContent) {
                            const merged = fullContent + (this.isChatPaused ? this.chatBufferedText : '');
                            this.$set(this.messages[assistantMessageIndex], 'content', merged);
                        } else {
                            // 如果没有收到任何内容，创建空消息
                            const merged = (fullContent || '') + (this.isChatPaused ? this.chatBufferedText : '');
                            this.messages.push({ role: 'assistant', content: merged || '（无回复）' });
                        }
                        // 流结束重置
                        this.chatBufferedText = '';
                        this.isChatPaused = false;
                        this.chatAbortController = null;
                    },
                    (error) => {
                        // 错误处理
                        this.error = '发送消息失败：' + error;
                        // 移除失败的消息
                        if (hasReceivedContent) {
                            this.messages.splice(assistantMessageIndex, 1);
                        }
                        if (this.messages.length > 0 && this.messages[this.messages.length - 1].role === 'user') {
                            this.messages.pop();
                        }
                    },
                    (fullContent) => {
                        // 完成时更新完整内容
                        if (hasReceivedContent) {
                            this.$set(this.messages[assistantMessageIndex], 'content', fullContent);
                        } else {
                            // 如果没有收到任何内容，创建空消息
                            this.messages.push({ role: 'assistant', content: fullContent || '（无回复）' });
                        }
                    },
                    (error) => {
                        // 错误处理
                        this.error = '发送消息失败：' + error;
                        // 移除失败的消息
                        if (hasReceivedContent) {
                            this.messages.splice(assistantMessageIndex, 1);
                        }
                        if (this.messages.length > 0 && this.messages[this.messages.length - 1].role === 'user') {
                            this.messages.pop();
                        }
                    },
                    this.settings.chat,
                    this.chatAbortController
                );
            } catch (error) {
                console.error('发送消息失败:', error);
                const errorInfo = window.ErrorHandler ? window.ErrorHandler.formatError(error) : { message: error.message || '未知错误' };
                this.error = errorInfo.message;
                if (errorInfo.suggestion) {
                    this.$message.warning(errorInfo.suggestion);
                }
                // 移除失败的用户消息
                if (this.messages.length > 0 && this.messages[this.messages.length - 1].role === 'user') {
                    this.messages.pop();
                }
            } finally {
                this.loading = false;
            }
        },
        
        // 切换暂停/继续（仅影响前端渲染，不中断网络流）
        toggleChatPause() {
            if (!this.loading) return;
            if (this.isChatPaused) {
                // 恢复：合并缓存到最后一条助手消息
                if (this.chatBufferedText && this.messages.length > 0) {
                    const lastIdx = this.messages.length - 1;
                    if (this.messages[lastIdx].role === 'assistant') {
                        this.$set(this.messages[lastIdx], 'content', (this.messages[lastIdx].content || '') + this.chatBufferedText);
                    }
                }
                this.chatBufferedText = '';
                this.isChatPaused = false;
            } else {
                this.isChatPaused = true;
            }
        },
        // 停止当前流式回复（中断连接）
        stopChatStream() {
            if (this.chatAbortController) {
                try { this.chatAbortController.abort(); } catch (e) {}
                this.chatAbortController = null;
            }
            this.chatBufferedText = '';
            this.isChatPaused = false;
        }
    }
});
